package com.springstudy.shiro.shiro.filters;

import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.web.filter.AccessControlFilter;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * AccessControlFilter 提供了访问控制的基础功能；比如是否允许访问/当访问拒绝时如何处理等
 * isAccessAllowed：即是否允许访问，返回 true 表示允许；
 * onAccessDenied：表示访问拒绝时是否自己处理，如果返回 true 表示自己不处理且继续拦截器链执行，返回 false 表示自己已经处理了（比如重定向到另一个页面）。
 *
 * @author chenrongrong
 * @since 2020/3/11 15:59
 */
@Slf4j
public class MyAccessControlFilter extends AccessControlFilter {

    /**
     * 是否允许访问
     * @param servletRequest
     * @param servletResponse
     * @param o
     * @return
     * @throws Exception
     */
    @Override
    protected boolean isAccessAllowed(ServletRequest servletRequest, ServletResponse servletResponse, Object o) throws Exception {
        log.info(getClass().getSimpleName()+"判断是否允许访问");
        //返回true则通过校验
        return true;

        //如果返回false，则继续调用onAccessDenied
        //return false;
    }

    /**
     * 访问拒绝时是否自己处理
     * @param servletRequest
     * @param servletResponse
     * @return
     * @throws Exception
     */
    @Override
    protected boolean onAccessDenied(ServletRequest servletRequest, ServletResponse servletResponse) throws Exception {
        log.info(getClass().getSimpleName()+"访问拒绝后自定义处理");
        return false;
    }
}
